iT邦幫忙

0

【Python學習筆記_NBA賽事預測-EFG%與勝負的相關?】

  • 分享至 

  • xImage
  •  

在任何球類賽事上,大家追逐的目標始終只有一個,那就是在有限的時間內獲得越多分數,籃球抑是同樣的道理,想在籃球場上獲得分數,不外乎就是投籃與罰球,但畢竟時間有限,所以「效率」就成為了球隊獲勝的重要因素。

籃球場上說到得分效率,最好的方式就是三分球,因此近年球場上開始盛行小球時代,大多球隊都會以三分球作為核心進攻手段,如何更精準計算有效的投籃命中率,將會是一個很重要的因素,而我們今天就是要來探討籃球指標中常觀察命中率的「EFG%」,我們將探討以下幾點:

  1. 主隊的EFG%真的比較高嗎?
  2. EFG%高者就一定獲勝?
  3. 單靠EFG%能精準判斷球隊勝負?

-------------------------------------------廣告-------------------------------------------

世足盃小組賽 賽程表搶先看!!!/images/emoticon/emoticon32.gif
你看好哪一隊會晉級呢?
有興趣都歡迎來Guess365預測你看好的隊伍,精美大獎拿不完,讓你看球賽不再孤單又無趣
Guess365預測競賽
Guess365世足賽程表
-------------------------------------------廣告-------------------------------------------

何謂EFG%?

EFG%全名為effective Field Goal percentage,中文叫「有效命中率」,由於一般的命中率是將兩分球與三分球視為同樣的貢獻,但實際上,三分球得分可是多於兩球1.5倍之多啊,在得分效益上當然是三分球比較好,也因此延伸出EFG%(有效命中率)這個指標,其公式就是:
EFG%

FGM 投籃命中次數、3PM 三分球命中次數、FGA 投籃次數

不過EFG%也有缺點,因為該指標是呈現球員真實「投籃」的價值,而有些球員像是中鋒、前鋒等等位置,可能都是靠中距離投籃、補籃或是灌籃等方式得分,較少投三分球,或是該球員本身在球隊的角色就不是主要投籃人物,像是Marcus Smart、Rudy Gobert等現役球員,都是以防守作為其武器,因此無法真的靠該指標直接判斷球員的真實價值,僅能呈現其「投籃」的表現。

深入探討,挖掘數據的真相

資料收集

我們的資料是來自於basketball reference,一個擁有多個不同領域賽事的歷史資料網,光NBA就提供了超過20年的完整數據,因此相當推薦大家可以參考該網站的數據。
basketball reference

主隊EFG%一定比較高嗎?

從MLB講到NBA,我們仍然要繼續尋找看看主場是否存在一定的優勢,畢竟這是看球賽的球迷一定會有的迷思,因此我們首先還是來看看在NBA中,主隊在主場的EFG%會不會比客隊來的高呢?

首先,我們一樣導入套件

# 數據整理
import numpy as np 
import pandas as pd 
 
# 可視化
import matplotlib.pyplot as plt 
import seaborn as sns 
import plotly as py 
import plotly.graph_objs as go

接著讀取資料

df = pd.read_excel(r"all_finaldata_sofescore.xlsx",index_col='Date')
df.head()

我們所爬取的資料中,有主隊以及客隊的EFG%,因此,我們要自行製作欄位「more_Betting_EFG」,為判斷主客隊誰的有效命中率較高;「W/L」則為判斷主客隊誰獲勝;「more_EFG_win」為判斷有效命中率高者是否獲勝

df['more_EFG'] = (df['Efg(H)'] > df['eFG(V)'])*1
df['W/L'] = (df['PTS_H'] > df['PTS_V']) *1
df["more_EFG_win"] = (df['more_EFG'] == df['W/L'])*1
df.head(5)df.head(5)

python

這裡我們用到剛剛創建的欄位「more_EFG」來視覺化看看

trace0 = go.Pie(labels=df["more_EFG"].value_counts().index, 
                values=df["more_EFG"].value_counts().values,
                hole=0.5,
                opacity=0.9,
                marker=dict(line=dict(color='white', width=1.3))
               ) 
layout = go.Layout(title='主客EFG%')
data = [trace0]
fig = go.Figure(data, layout)
py.offline.plot(fig,filename='主客EFG%.xlsx')

藍色(1)表示主隊EFG%較高,機率為54.8%,橘色(0)表示客隊EFG%較高,機率為45.2%。我們可以發現,主隊的EFG%的確有較高一點的跡象,但幾乎就是各半,所以說EFG並無特別受到主場優勢的加持,我們從MLB看到NBA,大概可以了解到,主場並沒有真的擁有什麼優勢。
主客EFG%

trace0 = go.Pie(labels=df["more_EFG_win"].value_counts().index, 
                values=df["more_EFG_win"].value_counts().values,
                hole=0.5,
                opacity=0.9,
                marker=dict(line=dict(color='white', width=1.3))
               ) 
layout = go.Layout(title='EFG%與勝負關係')
data = [trace0]
fig = go.Figure(data, layout)
py.offline.plot(fig, filename='EFG%與勝負關係.xlsx')

EFG%高者獲勝?

照理說,EFG%較高的一方,獲勝機率應該要越大才對,因為籃球絕大多數的得分都來自於投籃命中,那我們就來看看是否如我們想像的一樣。

此處藍色(1)為EFG%高且獲勝者,佔比高達81.3%,而橘色(0)為EFG%高但卻輸者,佔比為18.7%,看來大多時候有效命中率高者會比較容易獲勝,而剩下仍有將近20%左右的比率是怎麼一回事呢?
EFG%與勝負關係

單靠EFG%能精準判斷球隊勝負?

究竟是什麼原因造成這將近20%的比賽EFG%高卻輸掉比賽呢?根據我們的推測其中一個原因在於沒考慮到投球數,有些比賽雖然獲勝隊伍可能投籃命中率不高,但卻可能比對手多投了一些球,因而得分較高,我們來看看是否如此
EFG%例外
可以看到,正常高EFG%且獲勝的隊伍,其投球數平均是低於敵隊2.05顆球的,反觀EFG%低卻獲勝的場次,其獲勝隊伍平均投球數就高於敵隊5.58顆球,也就是說,EFG%並不一定高就會獲勝,因為其沒有考慮到出手的次數差距,當出手數高,就算命中率略低於對手,其還是有可能獲勝的

總結

根據今天的研究,EFG%的確能判別大多比賽的勝負,不過仍然有將近20%的例外,主因就是該指標參考的數據太過於片面,導致其他未考量因素影響到了比賽的勝負,因此,雖然EFG%指標對勝負來說很重要,但我們仍要繼續尋找其他同樣或是更為重要的指標進行更全面的參考才行,所以就讓我們繼續尋找重要特徵吧!!

【參考平台與資訊 & Python語言書籍】

[Guess官網平台-分析專欄] https://reurl.cc/yMOVE6

[資料視覺化 | 製作充滿說服力的資訊圖表]

[圖解資料結構 × 演算法:運用Python]

[Python 大數據專案 X 工程 X 產品 資料工程師的升級攻略]


圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言